//package com.inspur.edp.bff.designtime.generator.entity.help;
//
//import com.inspur.edp.bef.component.detailcmpentity.vm.VMComponent;
//import com.inspur.edp.bef.component.detailcmpentity.vm.VMMethod;
//import com.inspur.edp.bff.designtime.generator.VmGeneratorContext;
//import com.inspur.edp.bff.designtime.generator.entity.VmEntityGenContext;
//import com.inspur.edp.caf.generator.baseInfo.TypeInfo;
//import com.inspur.edp.caf.generator.property.ClassPropertyGenerator;
//import com.inspur.edp.das.commonmodel.IGspCommonModel;
//import com.inspur.edp.formserver.viewmodel.GspViewModel;
//import com.inspur.edp.formserver.viewmodel.action.MappedCdpAction;
//import com.inspur.edp.formserver.viewmodel.action.ViewModelAction;
//import com.inspur.edp.formserver.viewmodel.collection.ValueHelpConfigCollection;
//import com.inspur.edp.formserver.viewmodel.common.ValueHelpConfig;
//import org.eclipse.jdt.core.dom.Modifier;
//
//import java.util.ArrayList;
//
///**
// * HelpConfig属性的生成
// */
//public class HelpActionRecordProGenerator extends ClassPropertyGenerator {
//
//  private VmEntityGenContext entityGenContext;
//  private VmGeneratorContext vmGenContext;
//
//  public HelpActionRecordProGenerator(VmEntityGenContext entityGenContext,
//                                      VmGeneratorContext vmGenContext) {
//    this.entityGenContext = entityGenContext;
//    this.vmGenContext = vmGenContext;
//  }
//
//  @Override
//  protected ArrayList<Modifier.ModifierKeyword> getGetterAccessModifier() {
//    return new java.util.ArrayList<Modifier.ModifierKeyword>(
//            java.util.Arrays.asList(new Modifier.ModifierKeyword[]{Modifier.ModifierKeyword.PUBLIC_KEYWORD}));
//  }
//
//  @Override
//  protected ArrayList<Modifier.ModifierKeyword> getSetterAccessModifier() {
//    return new java.util.ArrayList<Modifier.ModifierKeyword>(
//            java.util.Arrays.asList(new Modifier.ModifierKeyword[]{Modifier.ModifierKeyword.PUBLIC_KEYWORD}));
//  }
//
//  @Override
//  protected String getPropertyName() {
//    return "ActionRecord";
//  }
//
//  @Override
//  protected TypeInfo getPropertyType() {
//    TypeInfo typeInfo=new TypeInfo(ArrayList.class.getTypeName());
//    typeInfo.setIsParameterizedType(true);
//    typeInfo.getArguments().add(new TypeInfo(String.class.getTypeName()));
//
//    TypeInfo listTypeInfo  =new TypeInfo(ArrayList.class.getTypeName());
//    listTypeInfo.setIsParameterizedType(true);
//    listTypeInfo.getArguments().add(new TypeInfo(ReflectInfo.class.getTypeName()));
//
//    typeInfo.getArguments().add(listTypeInfo);
//    return typeInfo;
//  }
//
//  @Override
//  protected BlockSyntax buildGetMethodBody() {
//    java.util.HashMap<String, java.util.ArrayList<ReflectInfo>> dic = GetAllActionInfo(
//        entityGenContext.Model);
//    return SyntaxFactory.Block(SyntaxFactory.<StatementSyntax>SingletonList(SyntaxFactory
//        .ReturnStatement(SyntaxFactory.ObjectCreationExpression(TypeUtils
//            .GetTypeSyntax(java.util.HashMap<String, java.util.ArrayList<ReflectInfo>>.class))
//            .WithInitializer(SyntaxFactory
//                .InitializerExpression(SyntaxKind.CollectionInitializerExpression,
//                    SyntaxFactory.<ExpressionSyntax>SeparatedList(GetListExpress(dic)))))));
//  }
//
//  @Override
//  protected boolean hasSetMethod() {
//    return false;
//  }
//
//  private java.util.HashMap<String, java.util.ArrayList<ReflectInfo>> GetAllActionInfo(
//      IGspCommonModel model) {
//    GspViewModel viewModel = (GspViewModel) model;
////C# TO JAVA CONVERTER TODO TASK: There is no equivalent to implicit typing in Java:
//    ValueHelpConfigCollection helpConfigs = viewModel.getValueHelpConfigs();
//    java.util.HashMap<String, java.util.ArrayList<ReflectInfo>> dic = new java.util.HashMap<String, java.util.ArrayList<ReflectInfo>>();
////C# TO JAVA CONVERTER TODO TASK: There is no equivalent to implicit typing in Java:
//    for (ValueHelpConfig item : helpConfigs) {
//      if (item.getHelpExtend() != null && item.getHelpExtend().getBeforeHelp() != null) {
//        String originalKey = item.getElementId(); //此ID分两段，用/区分
//        String[] info = originalKey.split("[/]", -1);
//        if (info.length != 2) {
//          throw new RuntimeException("ValueHelpConfig对象的ElementId字段不符合约定");
//        }
//        String key = info[0] + info[1];
//        java.util.ArrayList<ReflectInfo> list = new java.util.ArrayList<ReflectInfo>();
////C# TO JAVA CONVERTER TODO TASK: There is no equivalent to implicit typing in Java:
//        for (ViewModelAction helpAction : item.getHelpExtend().getBeforeHelp()) {
//          MappedCdpAction action = (MappedCdpAction) helpAction;
//          GspMetadata metadata = vmGenContext.getMetadataPool()
//              .getMetadata(action.getComponentPkgName(), action.getComponentEntityId());
////C# TO JAVA CONVERTER TODO TASK: There is no equivalent to implicit typing in Java:
//          VMComponent compMetadata = (VMComponent) ((metadata.getContent() instanceof VMComponent)
//              ? metadata.getContent() : null);
//          if (compMetadata == null) {
//            throw new RuntimeException("加载构件失败");
//          }
////C# TO JAVA CONVERTER TODO TASK: There is no equivalent to implicit typing in Java:
//          VMMethod method = compMetadata.getVmMethod();;
//          String assemblyName = method.getAssembly();
//          String className = method.getClassName();
//          list.add(new ReflectInfo(assemblyName, className));
//        }
//        dic.put(key, list);
//      }
//    }
//    return dic;
//  }
//
//  private SyntaxNodeOrToken[] GetListExpress(
//      java.util.HashMap<String, java.util.ArrayList<ReflectInfo>> dic) {
//
//    java.util.ArrayList<SyntaxNodeOrToken> result = new java.util.ArrayList<SyntaxNodeOrToken>();
//
//    for (String key : dic.keySet()) {
//      SyntaxNodeOrToken token1 = GetElementExpress(key, dic.get(key));
//      SyntaxNodeOrToken token2 = SyntaxFactory.Token(SyntaxKind.CommaToken);
//      result.add(token1);
//      result.add(token2);
//    }
//    if (result.isEmpty()) {
//      return result.toArray(new SyntaxNodeOrToken[]{});
//    }
//    result.remove(result.size() - 1);
//    return result.toArray(new SyntaxNodeOrToken[]{});
//  }
//
//  //生成每个元素上设置的所有ActionInfo
//  private SyntaxNodeOrToken getElementExpress(String key, java.util.ArrayList<ReflectInfo> info) {
//    return SyntaxFactory.InitializerExpression(SyntaxKind.ComplexElementInitializerExpression,
//        SyntaxFactory.<ExpressionSyntax>SeparatedList(new SyntaxNodeOrToken[]{
//            SyntaxFactory.LiteralExpression(SyntaxKind.StringLiteralExpression,
//                SyntaxFactory.Literal(key)), SyntaxFactory.Token(SyntaxKind.CommaToken),
//            SyntaxFactory.ObjectCreationExpression(
//                TypeUtils.GetTypeSyntax(java.util.ArrayList<ReflectInfo>.class)).WithInitializer(
//                SyntaxFactory.InitializerExpression(SyntaxKind.CollectionInitializerExpression,
//                    SyntaxFactory.<ExpressionSyntax>SeparatedList(GetInfoCreateExpress(info))))}));
//  }
//
//  //ActionInfo集合的创建
//  private SyntaxNodeOrToken[] GetInfoCreateExpress(java.util.ArrayList<ReflectInfo> info) {
//    java.util.ArrayList<SyntaxNodeOrToken> result = new java.util.ArrayList<SyntaxNodeOrToken>();
//
////C# TO JAVA CONVERTER TODO TASK: There is no equivalent to implicit typing in Java:
//    for (var item : info) {
//      SyntaxNodeOrToken token1 = SyntaxFactory
//          .ObjectCreationExpression(TypeUtils.GetTypeSyntax(ReflectInfo.class)).WithArgumentList(
//              SyntaxFactory.ArgumentList(SyntaxFactory.<ArgumentSyntax>SeparatedList(
//                  new SyntaxNodeOrToken[]{SyntaxFactory.Argument(SyntaxFactory
//                      .LiteralExpression(SyntaxKind.StringLiteralExpression,
//                          SyntaxFactory.Literal(item.AssemblyName))),
//                      SyntaxFactory.Token(SyntaxKind.CommaToken), SyntaxFactory.Argument(
//                      SyntaxFactory.LiteralExpression(SyntaxKind.StringLiteralExpression,
//                          SyntaxFactory.Literal(item.ClassName)))})));
//      SyntaxNodeOrToken token2 = SyntaxFactory.Token(SyntaxKind.CommaToken);
//      result.add(token1);
//      result.add(token2);
//    }
//    if (result.isEmpty()) {
//      return result.toArray(new SyntaxNodeOrToken[]{});
//    }
//    result.remove(result.size() - 1);
//    return result.toArray(new SyntaxNodeOrToken[]{});
//
//  }
//}